#!/bin/bash

# 前后都部署
# .\replace.sh 1 1 或者 .\replace.sh 2 2

# 只部署前端
# .\replace.sh 1 3

# 只部署后端
# .\replace.sh 3 1

# 前端打包好的文件位置
WEB_BAG_DIR="/compose/web"
# 前端包工作目录并命名为dist
WEB_BAG_WORKING_DIR="/dist"

# 服务端打包好的文件位置
SERVER_BAG_DIR="/compose/server"
# 服务端包工作目录
SERVER_BAG_WORKING_DIR="/main"

echo 开始复制
echo 结束main进程

# 方案1：使用 [[ ]]
if [ "$1" = "1" ] || [ "$1" = "2" ]; then
	# 前端部署
	echo 前端开始

	# 检查目录是否存在
	if [ ! -d "$WEB_BAG_DIR" ]; then
		echo "目录不存在: $WEB_BAG_DIR"
		exit 1
	fi

	# 使用 ls 命令按修改时间排序并提取最新的文件夹
	latest_file=$(ls -t "$WEB_BAG_DIR" | head -n 1)

	# 检查是否获取到文件
	if [ -z "$latest_file" ]; then
		echo "目录中没有文件"
	else
		echo "最新的文件是: $WEB_BAG_DIR/$latest_file"

		# 删除旧前端包
		rm -rf "$WEB_BAG_WORKING_DIR"

		cp -R "$WEB_BAG_DIR/$latest_file" "$WEB_BAG_WORKING_DIR"

		# 获取当前时间，格式为 YYYYMMDD_HHMMSS
		timestamp=$(date +"%Y%m%d_%H%M%S")
		# 生成新文件名
		new_filename="dist_${timestamp}"
		# 移动至工作目录
		mv "$WEB_BAG_DIR/$latest_file" "$WEB_BAG_DIR/$new_filename"
		echo "前端最新部署文件已重命名为: $new_filename"

		# 切换到目标目录
		cd "$WEB_BAG_DIR" || exit 1
	fi

	# 进入目标目录
	cd "$WEB_BAG_DIR" || exit

	# 获取修改时间最近的三个文件夹
	# mac语法
	# recent_folders=$(find $WEB_BAG_DIR -mindepth 1 -maxdepth 1 -type d -exec stat -f '%m "%N"' {} \; | sort -n -r | head -n 3 | awk -F' "' '{print $2}' | sed 's/"$//')
	# linux语法
	recent_folders=$(find $WEB_BAG_DIR -mindepth 1 -maxdepth 1 -type d -exec stat --format='%Y %n' {} \; | sort -n -r | head -n 3 | awk '{print $2}')

	# 获取所有文件夹，排除最近修改的三个文件夹，然后删除其他文件夹
	find $WEB_BAG_DIR -mindepth 1 -maxdepth 1 -type d | while read folder; do
		if ! echo "$recent_folders" | grep -q "^$folder$"; then
			rm -rf "$folder"
		fi
	done

	echo "已保留最新的三个文件夹，其余文件夹已删除。"

	echo -------------------前端已完成-------------------
fi

# 方案2：分别测试
if [ "$2" = "1" ] || [ "$2" = "2" ]; then
	# 后端部署
	echo 后端开始

	# pid=$(ps -ef | grep main | grep -v grep | grep -v /root/ | awk '{print $2}')
	# kill -9 $pid
	systemctl stop main-auto
	
	rm -f "$SERVER_BAG_WORKING_DIR"

	# 检查目录是否存在
	if [ ! -d "$SERVER_BAG_DIR" ]; then
		echo "目录不存在: $SERVER_BAG_DIR"
		exit 1
	fi

	# 使用 ls 命令按修改时间排序并提取最新的文件
	latest_file=$(ls -t "$SERVER_BAG_DIR" | head -n 1)

	# 检查是否获取到文件
	if [ -z "$latest_file" ]; then
		echo "目录中没有文件"
	else
		echo "最新的文件是: $SERVER_BAG_DIR/$latest_file"
		cp -R "$SERVER_BAG_DIR/$latest_file" "$SERVER_BAG_WORKING_DIR"

		# 获取当前时间，格式为 YYYYMMDD_HHMMSS
		timestamp=$(date +"%Y%m%d_%H%M%S")
		# 生成新文件名
		new_filename="main_${timestamp}"
		# 移动至工作目录
		mv "$SERVER_BAG_DIR/$latest_file" "$SERVER_BAG_DIR/$new_filename"
		echo "后端最新部署文件已重命名为: $new_filename"

		# cd /
		# chmod 777 ./main
		# nohup ./main &
		systemctl restart main-auto

		echo 后端已完成
	fi

	# 切换到目标目录
	cd "$SERVER_BAG_DIR" || exit 1

	# 获取文件夹中的所有文件
	file_count=$(ls -1 | wc -l)

	# 如果文件数量小于等于3，输出提示并退出
	if [ "$file_count" -le 3 ]; then
		echo "文件数量小于或等于3个，无需删除任何文件。"
		exit 0
	fi

	# 获取文件夹中的所有文件，按修改时间排序，保留最新的3个文件，删除其他文件
	ls -t | sed -n '4,$p' | xargs -I {} rm -- {}
	echo "已保留最新的三个文件，其余文件已删除。"
fi

echo replace脚本部署完成~!
